#ifndef SELF_DEFINE_FUNCTIONS_H_INCLUDED
#define SELF_DEFINE_FUNCTIONS_H_INCLUDED
#include<time.h>
#include <math.h>
#include <boost/random.hpp>
#include <boost/random/uniform_int.hpp>
#include <boost/random/cauchy_distribution.hpp>
#include <boost/random/normal_distribution.hpp>
#include <boost/random/uniform_real.hpp>

struct NewType
{
	double data;
	int id;
};
const int timesOfRun = 30;
const int dim = 30;
const int MAX_FV = 10000 * dim;

void Mutation_current_to_rand_1(double *population,double *mutation_vector, double *parent1, double *parent2, double *parent3, double *parent4, double Lbound, double Ubound, double F, int dim);
void Mutation_rand_1(double *population,double *mutation_vector, double *parent1, double *parent2, double *parent3,double Lbound, double Ubound, double F, int dim);
void Mutation_current_to_best_1(double *population,double *mutation_vector, double *parent1, double *parent2, double *parent3, double *parent4, double Lbound, double Ubound, double F, int dim);
void Mutation_cur_pbest_1(double *population,double *mutation_vector, double *parent0, double *parent1, double *parent2, double *parent3, double Lbound, double Ubound, double F, int dim);
void Mutation_cur_pbest_2(double *population,double *mutation_vector, double *parent0, double *parent1, double *parent2, double *parent3, double *parent4, double *parent5, double Lbound, double Ubound, double F, int dim);
void Mutation_current_to_best_2(double *population,double *mutation_vector, double *parent1, double *parent2, double *parent3, double *parent4, double *parent5, double *parent6, double Lbound, double Ubound, double F, int dim);
void Mutation_current_to_rand_2(double *population,double *mutation_vector, double *parent1, double *parent2, double *parent3, double *parent4, double *parent5, double *parent6, double Lbound, double Ubound, double F, int dim);
void Mutation_rand_2(double *population,double *mutation_vector, double *parent1, double *parent2, double *parent3, double *parent4, double *parent5, double Lbound, double Ubound, double F, int dim);
void Crossover(double *trial_vector, double *individual, double *mutation_vector, double CR, int dim);
int Roulette_Selection(double *probability, int population_size);
void Sort_Population_Fitness(int *sorted_index, int *individual_rank, double *population_results, int population_size, NewType *sorted_data);
void cec14_test_func(double *x, double *f, int nx, int mx, int func_num);
#endif // SELF_DEFINE_FUNCTIONS_H_INCLUDED
#pragma once

